home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / ISSUE08 / DATADICT / DDEDDLG.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-02-13  |  19.6 KB  |  669 lines

  1. unit Ddeddlg;
  2.  
  3. interface
  4.  
  5. uses SysUtils,WinTypes, WinProcs, Classes, Graphics, Forms, Controls, StdCtrls, Tabs,
  6.   Buttons, ExtCtrls, DBCtrls, Mask, DB, DBTables, Dialogs, Grids;
  7.  
  8. type
  9.   TDDMultPageDlg = class(TForm)
  10.     TabSet: TTabSet;
  11.     Notebook: TNotebook;
  12.     GroupBox1: TGroupBox;
  13.     GroupBox2: TGroupBox;
  14.     GroupBox3: TGroupBox;
  15.     DataSource1: TDataSource;
  16.     EditTABLE_NAME: TDBEdit;
  17.     Label8: TLabel;
  18.     Label1: TLabel;
  19.     EditFIELD_NAME: TDBEdit;
  20.     Label3: TLabel;
  21.     EditFIELD_LEN: TDBEdit;
  22.     CheckBoxREQUIRED: TDBCheckBox;
  23.     CheckBoxHASLINK: TDBCheckBox;
  24.     CheckBoxMDX: TDBCheckBox;
  25.     CheckBoxIS_CALC: TDBCheckBox;
  26.     Label15: TLabel;
  27.     EditSCR_PROMPT: TDBEdit;
  28.     Label14: TLabel;
  29.     EditHINT: TDBEdit;
  30.     B_hints: TButton;
  31.     FontButton: TButton;
  32.     FontDialog1: TFontDialog;
  33.     B_done: TButton;
  34.     Button1: TButton;
  35.     Label9: TLabel;
  36.     DBEditSCR_FMT: TDBEdit;
  37.     L_expression: TLabel;
  38.     Label18: TLabel;
  39.     EditSRCLINKTBL: TDBEdit;
  40.     Label19: TLabel;
  41.     EditSRCLINKFLD: TDBEdit;
  42.     Label21: TLabel;
  43.     MemoFORMULA: TDBMemo;
  44.     MemoIDX_EXPRES: TDBMemo;
  45.     Label6: TLabel;
  46.     Label7: TLabel;
  47.     Label11: TLabel;
  48.     DBEditGRD_PROMPT: TDBEdit;
  49.     DBEditGRD_WIDTH: TDBEdit;
  50.     Label12: TLabel;
  51.     DBMemoHELP: TDBMemo;
  52.     Label13: TLabel;
  53.     Label16: TLabel;
  54.     DBEditHelpID: TDBEdit;
  55.     Label17: TLabel;
  56.     MemoVALIDVALUE: TDBMemo;
  57.     LEditMask: TLabel;
  58.     EditEDITMASK: TDBEdit;
  59.     Label20: TLabel;
  60.     DBEditDEFAULT: TDBEdit;
  61.     Label22: TLabel;
  62.     Label24: TLabel;
  63.     GroupBox4: TGroupBox;
  64.     Label10: TLabel;
  65.     Label25: TLabel;
  66.     DBMemoDefine: TDBMemo;
  67.     GroupBox5: TGroupBox;
  68.     DBMemoNotes: TDBMemo;
  69.     DBTextTABLE_NAME: TDBText;
  70.     DBTextFIELD_NAME: TDBText;
  71.     DBTextTable_name2: TDBText;
  72.     DBTextFieldName2: TDBText;
  73.     DBTextTable_Name3: TDBText;
  74.     DBTextField_name3: TDBText;
  75.     DBEditMinVal: TDBEdit;
  76.     DBEditMaxVal: TDBEdit;
  77.     DBMemoVallist: TDBMemo;
  78.     Label23: TLabel;
  79.     Label26: TLabel;
  80.     Label27: TLabel;
  81.     Label28: TLabel;
  82.     FieldType_DBRadioGroup: TDBRadioGroup;
  83.     TableType_DBRadioGroup: TDBRadioGroup;
  84.     GroupBox6: TGroupBox;
  85.     DBNavigator1: TDBNavigator;
  86.     Label4: TLabel;
  87.     Label5: TLabel;
  88.     Label29: TLabel;
  89.     Label30: TLabel;
  90.     Label31: TLabel;
  91.     Label32: TLabel;
  92.     Label33: TLabel;
  93.     Label34: TLabel;
  94.     Label35: TLabel;
  95.     editmaskinfo: TEdit;
  96.     Label2: TLabel;
  97.     Label36: TLabel;
  98.     Label37: TLabel;
  99.     SG_1: TStringGrid;
  100.     SG_2: TStringGrid;
  101.     LB_table1: TListBox;
  102.     LB_table2: TListBox;
  103.     Label38: TLabel;
  104.     Label39: TLabel;
  105.     procedure FormCreate(Sender: TObject);
  106.     procedure TabSetClick(Sender: TObject);
  107.     procedure AnywhereKeyDown(Sender: TObject; var Key: Word;
  108.       Shift: TShiftState);
  109.     procedure B_hintsClick(Sender: TObject);
  110.     procedure FontButtonClick(Sender: TObject);
  111.     procedure B_resizeClick(Sender: TObject);
  112.     procedure DBEditMemoDblClick(Sender: TObject);
  113.     procedure EnterEditField(Sender: TObject);
  114.     procedure ExitEditField(Sender: TObject);
  115.     procedure ExitReqField(Sender: TObject);
  116.     Procedure table1Field_typeValidate(sender: TField);
  117.     procedure EditFIELD_LENEnter(Sender: TObject);
  118.     procedure DataSource1StateChange(Sender: TObject);
  119.     procedure FormActivate(Sender: TObject);
  120.     procedure DataSource1DataChange(Sender: TObject; Field: TField);
  121.     procedure CheckBoxMDXClick(Sender: TObject);
  122.     procedure CheckBoxMDXEnter(Sender: TObject);
  123.     procedure CheckBoxHASLINKClick(Sender: TObject);
  124.     procedure CheckBoxHASLINKEnter(Sender: TObject);
  125.     procedure CheckBoxIS_CALCClick(Sender: TObject);
  126.     procedure CheckBoxIS_CALCEnter(Sender: TObject);
  127.     procedure FieldType_DBRadioGroupChange(Sender: TObject);
  128.     procedure MemoIDX_EXPRESEnter(Sender: TObject);
  129.     procedure MemoIDX_EXPRESExit(Sender: TObject);
  130.     procedure FormKeyPress(Sender: TObject; var Key: Char);
  131.     procedure Button1Click(Sender: TObject);
  132.     procedure LB_table1Click(Sender: TObject);
  133.     procedure B_doneClick(Sender: TObject);
  134.     procedure SG_1DblClick(Sender: TObject);
  135.     procedure SG_2DblClick(Sender: TObject);
  136.   private
  137.     procedure toggleIDXMemoDisplay;
  138.     procedure toggleLINKFldsDisplay;
  139.     procedure toggleFormulaDisplay;
  140.     procedure Field_len_Setup;
  141.     procedure RefreshDictGrid;
  142.     procedure Table_To_SG(const Tablename : string; var whichGrid : TStringGrid);
  143.   public
  144.   end;
  145.  
  146. var
  147.   DDMultPageDlg: TDDMultPageDlg;
  148.  
  149. implementation
  150. uses mainmenu, editmemo, dbutils, runinfo, mystrng, utils;
  151. Const
  152.   Hintstr = 'Hints ';
  153.   HintsOn = Hintstr+'on';
  154.   HintsOff = Hintstr+'off';
  155.  
  156. {$R *.DFM}
  157.  
  158. procedure TDDMultPageDlg.FormCreate(Sender: TObject);
  159. var i : tFieldType;
  160. begin
  161.   { make the number of Tabs = number of Pages,
  162.     and have the same names }
  163.   TabSet.Tabs := Notebook.Pages;
  164.   with FieldType_DBRadioGroup.items do begin
  165.     clear;
  166.     for i := ftSTring to ftGraphic do
  167.       add(fieldtypeltr[i]+': '+fieldtypestr[i]);
  168.     end;
  169.   with FieldType_DBRadioGroup.values do begin
  170.     clear;
  171.     for i := ftSTring to ftGraphic do
  172.       add(fieldtypeStr[i]);
  173.     end;
  174.   with TableType_DBRadioGroup.items do begin
  175.     clear;
  176.     add('ttDefault');
  177.     add('ttdBase');
  178.     add('ttParadox');
  179.     add('ttASCII');
  180.     end;
  181. end;
  182.  
  183. procedure TDDMultPageDlg.FormActivate(Sender: TObject);
  184. begin
  185.   Screen.cursor := crHourGlass;
  186.   showhint := true;
  187.   B_hints.caption := Hintson;
  188.   DDMultPageDlg.caption := 'Editing '+main.ddListBox.items[0];
  189.   if openDB(main.sourcedatabase, main.dictTable, main.DictQuery, DataSource1,
  190.             main.DDPathName, Main.DDTableName)
  191.     then begin
  192.       RefreshDictGrid;
  193.       if main.EditThisfield
  194.         then
  195.           with main.dicttable do begin
  196.             first;
  197.             while not eof do
  198.               if (fields[0].text = main.gotoTable) and (fields[2].text = main.gotoField)
  199.                 then break
  200.                 else next;
  201.             end; {with}
  202.       main.dicttable.edit;
  203.       Screen.cursor := crDefault;
  204.       show;
  205.       end;
  206.   Screen.cursor := crDefault;
  207. end;
  208.  
  209. procedure TDDMultPageDlg.TabSetClick(Sender: TObject);
  210. begin
  211.   { set visible Page to which Tab was clicked }
  212.   Notebook.PageIndex := TabSet.TabIndex;
  213. end;
  214.  
  215. procedure TDDMultPageDlg.RefreshDictGrid;
  216. var i : integer;
  217. begin
  218.  DictCtrl.FillStringGrid(main.DictTable);
  219.  with DictCtrl.FDBSG do begin
  220.    SG_1.rowcount := rowcount;
  221.    SG_1.colcount := colcount;
  222.    for i := 0 to rowcount do
  223.      SG_1.rows[i].clear;
  224.    for i := ord(ddfField_name) to ord(ddfformula) do
  225.      SG_1.cells[i-1,0] := DictTableFieldNames[ddfOffsets(i)];
  226.    SG_2.rowcount := rowcount;
  227.    SG_2.colcount := colcount;
  228.    for i := 0 to rowcount do
  229.      SG_2.rows[i].clear;
  230.    for i := ord(ddfField_name) to ord(ddfformula) do
  231.      SG_2.cells[i-1,0] := DictTableFieldNames[ddfOffsets(i)];
  232.    end;
  233.  LB_table1.items := DictCtrl.FDBTableList;
  234.  LB_table2.items := LB_Table1.items;
  235. end;
  236.  
  237. procedure TDDMultPageDlg.Table_To_SG(const Tablename : string; var whichGrid : TStringGrid);
  238. {used when clicking on a table list to set up adjacent string grid with that
  239.  tables fields}
  240. var tmpstr : string;
  241.     i, j, Cur_row : integer;
  242. begin
  243.   for i := 0 to whichGrid.rowcount do
  244.     WhichGrid.rows[i].clear;
  245.   for i := ord(ddfField_name) to ord(ddfformula) do
  246.     WhichGrid.cells[i-1,0] := DictTableFieldNames[ddfOffsets(i)];
  247.   cur_row := 1;
  248.   for i := 0 to DictCtrl.FDBSG.rowcount - 1 do
  249.     if DictCtrl.FDBSG.cols[ord(ddfTable_name)].strings[i] = TableName
  250.       then begin
  251.         for j := 1 to ord(ddfFormula) do
  252.           WhichGrid.rows[cur_row].strings[j - 1] := DictCtrl.FDBSG.cells[j,i];
  253.         inc(cur_row);
  254.         end;
  255.   AdjustColWidth(0,whichGrid);
  256. end;
  257.  
  258. procedure TDDMultPageDlg.AnywhereKeyDown(Sender: TObject;
  259.   var Key: Word; Shift: TShiftState);
  260. var i : tfieldtype;
  261.     thischar : char;
  262. begin
  263.    if DataSource1.State in [dsEdit, dsInsert, dsBrowse]
  264.      then begin
  265.        if key = VK_NEXT
  266.           then DataSource1.dataset.next;
  267.        if key = VK_PRIOR
  268.           then DataSource1.dataset.prior;
  269.        if key = VK_F5
  270.           then begin
  271.             tabset.tabindex := 0;
  272.             tabsetClick(sender);
  273.             end;
  274.        if key = VK_F6
  275.           then begin
  276.             tabset.tabindex := 1;
  277.             tabsetClick(sender);
  278.             end;
  279.        if key = VK_F7
  280.           then begin
  281.             tabset.tabindex := 2;
  282.             tabsetClick(sender);
  283.             end;
  284.        if key = VK_F8
  285.           then begin
  286.             tabset.tabindex := 3;
  287.             tabsetClick(sender);
  288.             end;
  289.        if key = VK_F9
  290.           then begin
  291.             tabset.tabindex := 4;
  292.             tabsetClick(sender);
  293.             end;
  294.        if (shift = [ssCtrl]) and (key = VK_HOME)
  295.           then DataSource1.dataset.first;
  296.        if (shift = [ssCtrl]) and (key = VK_END)
  297.           then DataSource1.dataset.last;
  298.        if (shift = [ssCtrl]) and (key = VK_INSERT)
  299.           then DataSource1.dataset.insert;
  300.        if (shift = [ssCtrl]) and (key = VK_DELETE)
  301.           then begin
  302.             if messagedlg('Delete this record?', mtConfirmation, [mbYes,mbNo], 0) = mrYes
  303.               then DataSource1.dataset.delete;
  304.             end;
  305.        if key = VK_F2
  306.           then DataSource1.dataset.edit;
  307.        if key = VK_F3
  308.           then DataSource1.dataset.post;
  309.        if key = VK_F4
  310.           then DataSource1.dataset.cancel;
  311.        if (key >= ord('A')) and (key <= ord('z'))
  312.          then begin
  313.            {this doesn't work because apparently focused
  314.             is never true for a radio group?  or because
  315.             what?  steping through, it always finds focused
  316.             false}
  317.            thischar := upcase(chr(key));
  318.            if activeControl = TwinControl(Fieldtype_DBRadioGroup)
  319.              then for i := ftSTring to ftGraphic do
  320.                if upcase(thischar) = fieldtypeltr[i]
  321.                  then begin
  322.                    Fieldtype_DBRadioGroup.itemindex := ord(i) - 1;
  323.                    FieldType_DBRadioGroup.update;
  324.                    end;
  325.            end;
  326.        end;
  327. end;
  328.  
  329. procedure TDDMultPageDlg.FormKeyPress(Sender: TObject; var Key: Char);
  330. var i : tfieldtype;
  331. begin
  332. {   if Fieldtype_DBRadioGroup.focused
  333.          then for i := ftSTring to ftGraphic do
  334.             if upcase(key) = fieldtypeltr[i]
  335.               then Fieldtype_DBRadioGroup.itemindex := ord(i) - 1;
  336.  
  337.    {key := 0;}
  338. end;
  339.  
  340.  
  341. procedure TDDMultPageDlg.B_hintsClick(Sender: TObject);
  342. begin
  343.   if B_hints.caption = Hintson
  344.     then begin
  345.       B_hints.caption := Hintsoff;
  346.       DDMultPageDlg.showHint := false;
  347.       end
  348.     else begin
  349.       B_hints.caption := Hintson;
  350.       DDMultPageDlg.showHint := true;
  351.       end
  352. end;
  353.  
  354. procedure TDDMultPageDlg.FontButtonClick(Sender: TObject);
  355. begin
  356.   FontDialog1.Font := DDMultPageDlg.Font;
  357.   if FontDialog1.Execute
  358.     then DDMultPageDlg.Font := FontDialog1.Font;
  359. end;
  360.  
  361. procedure TDDMultPageDlg.B_resizeClick(Sender: TObject);
  362. begin
  363.   {ScalerForm.setWhichForm(DDMultPageDlg);
  364.   if ScalerForm.showmodal = mrYes
  365.     then update;}
  366. end;
  367.  
  368. procedure TDDMultPageDlg.DBEditMemoDblClick(Sender: TObject);
  369. begin
  370.   {Dangerous maneuver, typcasting like this; only doing it
  371.    because I've carefully linked this one to the tdbmemo
  372.    fields only.}
  373.   Edit_memo( tdbmemo(sender), EditTable_Name.text, EditField_name.text );
  374. end;
  375.  
  376. procedure TDDMultPageDlg.EnterEditField(Sender: TObject);
  377. begin
  378.   if sender is tdbedit
  379.     then (sender as tdbedit).color := clYellow;
  380.   if sender is tdbCheckBox
  381.     then (sender as tdbCheckBox).color := clYellow;
  382.   if sender is tdbMemo
  383.     then (sender as tdbMemo).color := clYellow;
  384.   if sender is tdbRadioGroup
  385.     then (sender as tdbRadioGroup).color := clYellow;
  386. end;
  387.  
  388. procedure TDDMultPageDlg.ExitEditField(Sender: TObject);
  389. begin
  390.   if sender is tdbedit
  391.     then (sender as tdbedit).color := clWhite;
  392.   if sender is tdbCheckBox
  393.     then (sender as tdbCheckBox).color := clWhite;
  394.   if sender is tdbMemo
  395.     then (sender as tdbMemo).color := clWhite;
  396.   if sender is tdbRadioGroup
  397.     then (sender as tdbRadioGroup).color := clWhite;
  398. end;
  399.  
  400. procedure TDDMultPageDlg.ExitReqField(Sender: TObject);
  401.  {linked to required fields in object inspector}
  402. begin
  403.   if sender is tdbedit
  404.     then (sender as tdbedit).color := clLime;
  405.   if sender is tdbCheckBox
  406.     then (sender as tdbCheckBox).color := clLime;
  407.   if sender is tdbRadioGroup
  408.     then (sender as tdbRadioGroup).color := clLime;
  409. end;
  410.  
  411. procedure TDDMultPageDlg.Field_len_Setup;
  412.   procedure novalue;
  413.   begin
  414.     editfield_len.text := '0';
  415.     editfield_len.enabled := false;
  416.     editfield_len.tabStop := false;
  417.     editfield_len.color := clGray;
  418.     label3.caption := '(length)';
  419.     label3.font.color := clGray;
  420.     editfield_len.hint := 'Not applicable for this data type';
  421.   end;
  422.  
  423.   procedure params_are(const what, newprompt : string);
  424.   begin
  425.     editfield_len.enabled := true;
  426.     editField_len.TabStop := true;
  427.     editfield_len.color := clWindow;
  428.     label3.caption := newprompt;
  429.     label3.font.color := clBlack;
  430.     editfield_len.hint := what;
  431.   end;
  432.  
  433.   begin
  434.   if FieldType_DBRadioGroup.itemindex <> -1
  435.     then case FieldType_DBRadioGroup.values[FieldType_DBRadioGroup.itemindex][1] of
  436.        'U' : {ftUnknown}  novalue;
  437.        'S' : {ftString}   params_are('Length of string, Max = 254', 'Length');
  438.        'I',  {ftSmallint}
  439.        'N',  {ftInteger}
  440.        'W',  {ftWord}
  441.        'L' : {ftBoolean}   novalue;
  442.        'F',  {ftFloat}
  443.        'C',  {ftCurrency}
  444.        'B' : {ftBCD}       params_are('Number of places to right of decimal before rounding','Precision');
  445.        'D',  {ftDate}
  446.        'T',  {ftTime}
  447.        'A' : {ftDateTime}  novalue;
  448.        'Y',  {ftBytes}
  449.        'V',  {ftVarBytes}
  450.        'O',  {ftBlob}
  451.        'M',  {ftMemo}
  452.        'G' : {ftGraphic}   params_are('Number of bytes to be stored', 'Max length');
  453.        end;
  454. end;
  455.  
  456. Procedure TDDMultPageDlg.table1Field_typeValidate(sender: TField);
  457. begin
  458.   if FieldType_DBRadioGroup.itemindex = -1
  459.     then MessageDlg('Must select a data type', mtWarning, [mbOK], 0);
  460. end;
  461.  
  462.  
  463. procedure TDDMultPageDlg.EditFIELD_LENEnter(Sender: TObject);
  464. begin
  465.   if FieldType_DBRadioGroup.itemindex = -1
  466.     then begin
  467.       MessageDlg('Must specify a data type', mtWarning, [mbOK], 0);
  468.       FieldType_DBRadioGroup.setfocus;
  469.       end
  470.     else EditField_len.color := clYellow;
  471. end;
  472.  
  473.  
  474. procedure TDDMultPageDlg.toggleIDXMemoDisplay;
  475. begin
  476.    if CheckBoxMDX.state = cbChecked
  477.       then begin
  478.          L_expression.font.color := clBlack;
  479.          MemoIDX_EXPRES.color := clWindow;
  480.          MemoIDX_Expres.enabled := true;
  481.          end
  482.       else begin
  483.          CheckBoxMDX.state := cbUnchecked;
  484.          L_expression.font.color := clGray;
  485.          MemoIDX_EXPRES.color := clGray;
  486.          MemoIDX_Expres.enabled := false;
  487.          end;
  488. end;
  489.  
  490. procedure TDDMultPageDlg.toggleLINKFldsDisplay;
  491. begin
  492.   if CheckBoxHASLINK.state = cbChecked
  493.      then begin
  494.        EditSRCLINKTBL.color := clWindow;
  495.        EditSrcLinkTbl.enabled := true;
  496.        Label19.font.color := clBlack;
  497.        EditSRCLINKFLD.color := clWindow;
  498.        EditSrcLinkFld.enabled := true;
  499.        Label18.font.color := clBlack;
  500.        end
  501.      else begin
  502.        CheckBoxHasLink.state := cbUnchecked;
  503.        EditSRCLINKTBL.color := clGray;
  504.        EditSrcLinkTbl.enabled := false;
  505.        Label19.font.color := clGray;
  506.        EditSRCLINKFLD.color := clGray;
  507.        EditSrcLinkFld.enabled := false;
  508.        Label18.font.color := clGray;
  509.        end;
  510. end;
  511.  
  512. procedure TDDMultPageDlg.toggleFormulaDisplay;
  513. begin
  514.   if CheckBoxIs_CALC.state = cbChecked
  515.      then begin
  516.         MemoFormula.color := clWindow;
  517.         MemoFormula.enabled := true;
  518.         label21.font.color := clBlack;
  519.         end
  520.      else begin
  521.         CheckBoxIs_Calc.state := cbUnchecked;
  522.         MemoFormula.color := clGray;
  523.         MemoFormula.enabled := false;
  524.         label21.font.color := clGray;
  525.         end;
  526. end;
  527.  
  528. procedure TDDMultPageDlg.DataSource1StateChange(Sender: TObject);
  529. const tble = 'Table is in %s mode';
  530. begin
  531.   case DataSource1.state of
  532.     dsInactive : GroupBox6.caption := format(tble, ['inactive']);
  533.     dsBrowse   : GroupBox6.caption := format(tble, ['browse']);
  534.     dsEdit     : GroupBox6.caption := format(tble, ['edit']);
  535.     dsInsert   : GroupBox6.caption := format(tble, ['insert']);
  536.     dsSetKey   : GroupBox6.caption := format(tble, ['set key']);
  537.     dsCalcFields : GroupBox6.caption := format(tble, ['calc']);
  538.     end; {case of state}
  539.   if DataSource1.state <> dsInactive
  540.     then GroupBox6.caption := Groupbox6.caption +
  541.          '      # of records:'+IntToStr(main.DictTable.recordCount);
  542. end;
  543.  
  544.  
  545.  
  546. procedure TDDMultPageDlg.DataSource1DataChange(Sender: TObject;
  547.   Field: TField);
  548. begin
  549.   if groupBox1.visible = true
  550.     then begin
  551.       toggleIDXMemoDisplay;
  552.       toggleLinkFldsDisplay;
  553.       toggleFormulaDisplay;
  554.       field_len_setup;
  555.       end;
  556.   if main.dicttable.modified
  557.     then begin
  558.       main.DictWasChanged := true;
  559.       end;
  560. end;
  561.  
  562. procedure TDDMultPageDlg.CheckBoxMDXClick(Sender: TObject);
  563. begin
  564.   ToggleIDXMemoDisplay;
  565. end;
  566.  
  567. procedure TDDMultPageDlg.CheckBoxMDXEnter(Sender: TObject);
  568. begin
  569.   ToggleIDXMemoDisplay;
  570.   EnterEditField(sender);
  571. end;
  572.  
  573. procedure TDDMultPageDlg.CheckBoxHASLINKClick(Sender: TObject);
  574. begin
  575.   ToggleLinkFldsDisplay;
  576. end;
  577.  
  578. procedure TDDMultPageDlg.CheckBoxHASLINKEnter(Sender: TObject);
  579. begin
  580.   ToggleLinkFldsDisplay;
  581.   EnterEditField(sender);
  582. end;
  583.  
  584. procedure TDDMultPageDlg.CheckBoxIS_CALCClick(Sender: TObject);
  585. begin
  586.   ToggleFormulaDisplay;
  587. end;
  588.  
  589. procedure TDDMultPageDlg.CheckBoxIS_CALCEnter(Sender: TObject);
  590. begin
  591.   ToggleFormulaDisplay;
  592.   EnterEditField(sender);
  593. end;
  594.  
  595. procedure TDDMultPageDlg.FieldType_DBRadioGroupChange(Sender: TObject);
  596. begin
  597.   Field_Len_setup;
  598. end;
  599.  
  600. procedure TDDMultPageDlg.MemoIDX_EXPRESEnter(Sender: TObject);
  601. {linked to IDX_EXPRESS, FORMULA memos and SRCLINK TBL & FIELD edits}
  602. begin
  603.    EnterEditField(sender);
  604.    if sender is tdbmemo
  605.      then (sender as tdbmemo).BringToFront;
  606.    if sender is tdbedit
  607.      then (sender as tdbedit).BringToFront;
  608. end;
  609.  
  610. procedure TDDMultPageDlg.MemoIDX_EXPRESExit(Sender: TObject);
  611. {linked to IDX_EXPRESS, FORMULA memos and SRCLINK TBL & FIELD edits}
  612. begin
  613.   ExitEditField(sender);
  614.   FieldType_DBRadioGroup.bringToFront;
  615. end;
  616.  
  617.  
  618.  
  619. procedure TDDMultPageDlg.Button1Click(Sender: TObject);
  620. begin
  621. {$IFDEF buggy}
  622.  runinfoform.updateinfo('Edit look');
  623.  runinfoform.show;
  624. {$ENDIF}
  625.  
  626. end;
  627.  
  628. procedure TDDMultPageDlg.LB_table1Click(Sender: TObject);
  629. var whichTable : string;
  630. begin
  631.   WhichTable := (sender as TListBox).items[(sender as TListBox).itemindex];
  632.   if TListBox(sender).name = 'LB_table1'
  633.     then Table_To_SG(WhichTable, SG_1);
  634.   if TListBox(sender).name = 'LB_table2'
  635.     then Table_To_SG(WhichTable, SG_2);
  636. end;
  637.  
  638. procedure TDDMultPageDlg.B_doneClick(Sender: TObject);
  639. begin
  640. {  main.DictwasChanged := true;}
  641.   close;
  642. end;
  643.  
  644. procedure TDDMultPageDlg.SG_1DblClick(Sender: TObject);
  645. begin
  646.   with main.dicttable do begin
  647.     first;
  648.     while not eof do
  649.       if (findfield('TABLE_NAME').text = LB_table1.items[LB_table1.itemindex])
  650.           and (findfield('FIELD_NAME').text = SG_1.cells[0, SG_1.row])
  651.         then break
  652.         else next;
  653.     end;
  654. end;
  655.  
  656. procedure TDDMultPageDlg.SG_2DblClick(Sender: TObject);
  657. begin
  658.   with main.dicttable do begin
  659.     first;
  660.     while not eof do
  661.       if (findfield('TABLE_NAME').text = LB_table2.items[LB_table2.itemindex])
  662.           and (findfield('FIELD_NAME').text = SG_2.cells[0, SG_2.row])
  663.         then break
  664.         else next;
  665.     end;
  666. end;
  667.  
  668. end.
  669.